atom/proc
    LeftClick(mob/clicker, location, control, params)
    RightClick(mob/clicker, location, control, params)
    MiddleClick(mob/clicker, location, control, params)

    LeftAltClick(mob/clicker, location, control, params)
    RightAltClick(mob/clicker, location, control, params)
    MiddleAltClick(mob/clicker, location, control, params)

    LeftShiftClick(mob/clicker, location, control, params)
    RightShiftClick(mob/clicker, location, control, params)
    MiddleShiftClick(mob/clicker, location, control, params)

    LeftCtrlClick(mob/clicker, location, control, params)
    RightCtrlClick(mob/clicker, location, control, params)
    MiddleCtrlClick(mob/clicker, location, control, params)

    LeftDblClick(mob/clicker, location, control, params)
    RightDblClick(mob/clicker, location, control, params)
    MiddleDblClick(mob/clicker, location, control, params)

    LeftAltDblClick(mob/clicker, location, control, params)
    RightAltDblClick(mob/clicker, location, control, params)
    MiddleAltDblClick(mob/clicker, location, control, params)

    LeftShiftDblClick(mob/clicker, location, control, params)
    RightShiftDblClick(mob/clicker, location, control, params)
    MiddleShiftDblClick(mob/clicker, location, control, params)

    LeftCtrlDblClick(mob/clicker, location, control, params)
    RightCtrlDblClick(mob/clicker, location, control, params)
    MiddleCtrlDblClick(mob/clicker, location, control, params)

    HasMouseEntered(client/clicker, location, control, params)

client/Click(atom/object, location, control, params)
    var/list/p = params2list(params)
    if     (("shift" in p) && ("middle" in p))object.MiddleShiftClick(mob, location, control, params)
    else if(("shift" in p) && ("right" in p)) object.RightShiftClick(mob, location, control, params)
    else if(("shift" in p) && ("left" in p))  object.LeftShiftClick(mob, location, control, params)

    else if(("ctrl" in p) && ("middle" in p)) object.MiddleCtrlClick(mob, location, control, params)
    else if(("ctrl" in p) && ("right" in p))  object.RightCtrlClick(mob, location, control, params)
    else if(("ctrl" in p) && ("left" in p))   object.LeftCtrlClick(mob, location, control, params)

    else if(("alt" in p) && ("middle" in p)) object.MiddleAltClick(mob, location, control, params)
    else if(("alt" in p) && ("right" in p))  object.RightAltClick(mob, location, control, params)
    else if(("alt" in p) && ("left" in p))   object.LeftAltClick(mob, location, control, params)

    else if("middle" in p) object.MiddleClick(mob, location, control, params)
    else if("right" in p)  object.RightClick(mob, location, control, params)
    else if("left" in p)   object.LeftClick(mob, location, control, params)

client/DblClick(atom/object, location, control, params)
    var/list/p = params2list(params)
    if     (("shift" in p) && ("middle" in p))object.MiddleShiftDblClick(mob, location, control, params)
    else if(("shift" in p) && ("right" in p)) object.RightShiftDblClick(mob, location, control, params)
    else if(("shift" in p) && ("left" in p))  object.LeftShiftDblClick(mob, location, control, params)

    else if(("ctrl" in p) && ("middle" in p)) object.MiddleCtrlDblClick(mob, location, control, params)
    else if(("ctrl" in p) && ("right" in p))  object.RightCtrlDblClick(mob, location, control, params)
    else if(("ctrl" in p) && ("left" in p))   object.LeftCtrlDblClick(mob, location, control, params)

    else if(("alt" in p) && ("middle" in p)) object.MiddleAltDblClick(mob, location, control, params)
    else if(("alt" in p) && ("right" in p))  object.RightAltDblClick(mob, location, control, params)
    else if(("alt" in p) && ("left" in p))   object.LeftAltDblClick(mob, location, control, params)

    else if("middle" in p) object.MiddleDblClick(mob, location, control, params)
    else if("right" in p)  object.RightDblClick(mob, location, control, params)
    else if("left" in p)   object.LeftDblClick(mob, location, control, params)

client/MouseEntered(atom/object, location, control, params)

	if(isbook(object) || isarmor(object))
		//give the user some time to get his/her mouse inside the item and pause it
		update_mouse()

		sleep(TOOLTIP_DELAY/2)

		object.HasMouseEntered(src, location, control, params)